package tok

type TokenType int

const (
	ILLEGAL TokenType = iota
	EOF

	// Identifiers + literals
	IDENTIFIER       // add, foobar, x, y, ...
	INTEGER          // 123
	REAL             // 123.45
	RATIONAL         // 1/2
	COMPLEX          // 1+2i
	STRING           // "foobar"
	CHARACTER        // #\a
	BOOLEAN          // #t, #f
	VECTOR           // #(...)
	QUOTE            // '
	QUASIQUOTE       // `
	UNQUOTE          // ,
	UNQUOTE_SPLICING // ,@
	COMMENT          // ;

	LPAREN // (
	RPAREN // )
)

// Token represents a lexical token
type Token struct {
	Type    TokenType
	Lexeme  string
	Literal any
	Line    int
	Column  int
}
